package com.matrix.api.product;

import com.matrix.api.product.vo.ProductCategoryVO;
import com.matrix.api.product.vo.ProductVO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author 有点甜
 * @since 2025/7/27
 */
public interface ProductApi {

    /**
     * 根据ID列表批量获取商品信息
     *
     * @param ids 商品ID列表
     * @return 商品VO列表
     */
    List<ProductVO> getProductsByIds(List<Long> ids);

    /**
     * 批量更新菜品的评分
     *
     * @param ratingsMap Key为productId, Value为新的平均分
     */
    void batchUpdateProductRatings(Map<Long, BigDecimal> ratingsMap);

    /**
     * 批量更新菜品的月销量
     *
     * @param salesMap Key为productId, Value为新的月销量
     */
    void batchUpdateMonthlySales(Map<Long, Integer> salesMap);

    /**
     * 获取店铺的完整菜单
     *
     * @param shopId 店铺ID
     * @return 菜单列表
     */
    List<ProductCategoryVO> getShopMenu(Long shopId);

    /**
     * 批量扣减商品库存
     *
     * @param stockDeductionMap Key为productId, Value为要扣减的数量
     * @throws com.matrix.common.exception.BusinessException 如果库存不足
     */
    void deductStock(Map<Long, Integer> stockDeductionMap);

    /**
     * 批量增加商品库存
     *
     * @param stockIncreaseMap Key为productId, Value为要增加的数量
     */
    void increaseStock(Map<Long, Integer> stockIncreaseMap);
}